﻿using System;
using System.Web;
using Entidades;
using Common;
using Entidades.jSON;
using Entidades.jSON.Sistema;
using Web.Pages;


namespace Web.Helpers
{
    /// <summary>
    /// Helper class to assist setting/getting values from/to ASP .NET Session object
    /// </summary>
    public class SessionHelper
    {
        #region Web Methods

        /// <summary>
        /// Devuelve el Usuario actualmente logueado
        /// </summary>
        /// <returns></returns>
        //public static Usuario GetCurrentUser(HttpContext context = null)
        public static UsuarioInfo GetCurrentUser(HttpContext context = null)
        {
            //return Helpers.WebHelper.Session.Get<Usuario>(WellKnownKeys.Session.CURRENT_USER);
            return Helpers.WebHelper.Session.Get<UsuarioInfo>(WellKnownKeys.Session.CURRENT_USER);
        }

        /// <summary>
        /// Log off
        /// </summary>
        /// <returns></returns>
        public static void LogOff()
        {
            Helpers.WebHelper.Session.Set(WellKnownKeys.Session.CURRENT_USER, null);
        }
        
        #endregion

        /// <summary>
        /// Construye un objeto RespuestaInfo, basado en parámetros recibidos, y lo devuelve como una cadena en formato jSON.
        /// </summary>
        /// <param name="message"></param>
        /// <param name="result"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string BuildResponse(string message, bool result, object value)
        {
            var stringifiedResponse = String.Empty;
            try
            {
                var respuestaInfo = new RespuestaInfo { Resultado = result, Mensaje = message, Valor = value };
                stringifiedResponse = BuildResponse(respuestaInfo);
            }
            catch (Exception ex)
            {
                BasePage.LogError(ex);
                throw;
            }
            return stringifiedResponse;
        }
        public static string BuildResponse(RespuestaInfo respuestaInfo)
        {
            var stringifiedResponse = String.Empty;
            try
            {
                stringifiedResponse = Formatter.JSON<RespuestaInfo>.Serialize(respuestaInfo);
            }
            catch (Exception ex)
            {
                BasePage.LogError(ex);
                throw;
            }
            return stringifiedResponse;
        }

        /// <summary>
        /// Construir Respuesta Con Error
        /// </summary>
        /// <param name="ex"></param>
        /// <param name="mensaje"></param>
        /// <returns></returns>
        public static string ConstruirRespuestaConError(Exception ex, string mensaje)
        {
            return String.Format("Ocurrió un error al procesar el método <{0}>{1}Detalle: {2}{3}", mensaje, Environment.NewLine, Environment.NewLine, ex.Message);
        }
    }
}